package com.sky.mapper.admin;

import com.github.pagehelper.Page;
import com.sky.annotation.AutoFill;
import com.sky.enumeration.OperationType;
import com.sky.pojo.Dish;
import com.sky.vo.DishVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 菜品持久层接口
 * @author zgp
 * @version V1.0
 * @date 2025-01-14 15:58
 */
@Mapper
public interface DishMapper {
    /**
     * 新增菜品
     * @param dish 菜品
     */
    @AutoFill(OperationType.INSERT)
    void insert(Dish dish);

    /**
     * 根据菜品名称查询
     * @param name 菜品名称
     * @return 菜品
     */
    Dish selectByName(String name);

    /**
     * 菜品条件分页查询
     * @param dish 查询条件实体
     * @return 分页数据
     */
    Page<DishVO> selectPageList(Dish dish);

    /**
     * 根据id批量删除菜品
     * @param ids 菜品id集合
     */
    void deleteByIds(@Param("ids") List<Integer> ids);

    /**
     * 更新菜品数据
     * @param dish 菜品
     */
    @AutoFill(OperationType.UPDATE)
    void updateById(Dish dish);

    /**
     * 根据id查询菜品及口味
     * @param id 菜品id
     * @return 菜品VO
     */
    DishVO selectById(Long id);

    /**
     * 根据分类id查询菜品
     * @param categoryId 分类id
     * @param status 菜品状态
     * @return 菜品集合
     */
    List<DishVO> selectByCategoryIdAndStatus(@Param("categoryId") Integer categoryId, @Param("status") Integer status);

    /**
     * 根据菜品状态及ids统计数量
     * @param ids 菜品ids
     * @param status 菜品状态
     * @return 数量
     */
    int countByStatusAndIds(@Param("ids") List<Integer> ids, @Param("status") Integer status);

    /**
     * 根据菜品id集合查询菜品
     * @param ids 菜品id集合
     * @return 菜品集合
     */
    List<Dish> selectByIds(@Param("ids") List<Integer> ids);
}
